package com.ddm.controller.web;

import com.ddm.dto.webDTO.MarketSpDTO;
import com.ddm.dto.webDTO.PullOffReqDTO;
import com.ddm.entity.webEntity.MarketSp;
import com.ddm.result.PageResult;
import com.ddm.result.Result;
import com.ddm.service.webService.MarketSpService;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * market接口
 *
 * @author lwj
 * @version 1.0
 */
@Api(tags = "市场供求管理")
@RestController
@RequestMapping("Web/market/Sp")
@Slf4j
public class MarketSpController {

    @Autowired
    private MarketSpService marketSpService;

    /**
         ////     * 根据ID查询沉香小课堂详情
     ////     *
     ////     * @param id 供求ID
     ////     * @return 供求详情
     ////     */
    @GetMapping("/GById")
    @ApiOperation("根据ID查询供求信息详情")
    public Result<MarketSp> getById(@RequestParam Long id) {
        log.info("查询供求信息详情，ID：{}", id);
        MarketSp c = marketSpService.getById(id);
        return Result.success(c);
    }


    /**
     //     * 分页查询沉香小课堂
     //     *还没有分配身份权限查询
     模糊查询 标题 联系人
     //     * @return 沉香小课堂列表
     //     */
    @GetMapping("/GList")
    @ApiOperation("分页获取供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<PageResult> GetMarketSpList(MarketSpDTO Dto){
        log.info("分页获取供求信息");
        System.out.println(""+Dto);
        return Result.success(marketSpService.getMarketSpList(Dto));
    }


//    @ApiOperation("批量删除市场供求信息")
//    @DeleteMapping("/batch")
//    public Result deleteMSpList(@RequestBody List<MarketSpDTO> DTOS ){
//        log.info("批量删除用户");
//        if (DTOS == null){
//            throw new DataErrorException(MessageConstant.NULL_DATA);
//        }
//        marketService.deleteMarketSpList(DTOS);
//
//        return Result.success("删除成功");
//    }
    /**
     * 添加供求信息
     * @param dto 供求信息DTO
     * @return 添加结果
     */
    @PostMapping("/add")
    @ApiOperation("添加供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<Boolean> addMarketSp(@RequestBody MarketSpDTO dto) {
        log.info("添加供求信息: {}", dto);
        return Result.success(marketSpService.addMarketSp(dto));
    }

    /**
     * 用户发布供求信息
     * @param dto 供求信息DTO
     * @return 添加结果
     */
    @PostMapping("/UserAdd")
    @ApiOperation("添加供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<String> addMarketSp2(@RequestBody MarketSpDTO dto) {
        log.info("添加供求信息: {}", dto);
        return Result.success(marketSpService.InsertSpByUserType(dto));
    }
    /**
     * 更新供求信息
     * @param dto 供求信息DTO（需包含sdTitle和sdPublishDate）
     * @return 更新结果
     */
    @PutMapping("/update")
    @ApiOperation("更新供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<Boolean> updateMarketSp(@RequestBody MarketSpDTO dto) {
        log.info("更新供求信息: {}", dto);

        return Result.success(marketSpService.updateMarketSp(dto));
    }

    /**
     * 删除供求信息
     * @param id
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    @ApiOperation("删除供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<Boolean> deleteMarketSp(long id) {
        log.info("删除供求信息: {}", id);
        return Result.success(marketSpService.deleteMarketSp(id));
    }

    /**
     * 批量删除供求信息
     * @param ids 要删除的ID列表
     * @return 删除结果
     */
    @DeleteMapping("/batchDelete")
    @ApiOperation("批量删除供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<String> batchDeleteMarketSp(@RequestBody List<Long> ids) {
        log.info("批量删除供求信息, ID列表: {}", ids);
        if (ids == null || ids.isEmpty()) {
            return Result.error("ID列表不能为空");
        }
        Boolean success =marketSpService.batchDeleteMarketSp(ids);
        return success?Result.success("删除成功"):Result.success("删除失败");
    }

    /**
     * 下架或下架供求信息
     * @param id
     * @param targetStatus
     * @return 操作结果
     */
    @PostMapping("/pullOff")
    @ApiOperation("上/下架供求信息（上架需审核）")
    public Result<String> pullOffMarketSp(
            @RequestParam("id") Long id,  // 供求信息ID（必填）
            @RequestParam("targetStatus") Integer targetStatus  // 目标状态（必填，-1=待审核，2=下架）
    ) {
        log.info("操作供求信息[{}]，目标状态: {}", id, targetStatus);
        try {
            boolean result = marketSpService.pullOffMarketSp(id, targetStatus);
            if (result) {
                // 根据目标状态返回对应成功信息（匹配Service的逻辑）
                if (targetStatus == 2) {
                    return Result.success("下架成功");
                } else if (targetStatus == -1) {
                    // 上架操作实际是"重新上架，进入待审核"
                    return Result.success("已提交重新上架申请，等待审核");
                }
            } else {
                // 已处于目标状态的提示
                if (targetStatus == 2) {
                    return Result.error("该信息已下架");
                } else if (targetStatus == -1) {
                    return Result.error("该信息已提交审核，请勿重复操作");
                }
            }
            // 非预期的目标状态（理论上被Service的校验拦截）
            return Result.error("无效的操作状态");
        } catch (IllegalArgumentException e) {
            // 捕获状态合法性校验异常（如传了-1和2之外的值）
            return Result.error(e.getMessage());
        } catch (RuntimeException e) {
            // 捕获"记录不存在"等业务异常
            return Result.error(e.getMessage());
        } catch (Exception e) {
            // 其他未知错误
            log.error("操作供求信息异常", e);
            return Result.error("操作失败，请稍后重试");
        }
    }

    /**
     //     * 分页查询沉香小课堂
     //     *用户查询
     模糊查询 标题 联系人
     //     * @return 沉香小课堂列表
     //     */
    @GetMapping("/UGList")
    @ApiOperation("用户分页获取供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<PageResult> UserGetMarketSpList(MarketSpDTO Dto,Integer userId){
        log.info("用户分页获取供求信息");
        System.out.println(""+Dto);
        return Result.success(marketSpService.getUserMarketSpList(Dto,userId));
    }

    /**
     //     * 分页查询沉香小课堂
     //     *只返回已审核的信息
     //     * @return 沉香小课堂列表
     //     */
    @GetMapping("/RGList")
    @ApiOperation("分页获取已通过供求信息")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<PageResult> GetPassedMarketSpList(MarketSpDTO Dto){
        log.info("分页获取审核通过的供求信息");
        System.out.println(""+Dto);
        return Result.success(marketSpService.getPassedMarketSpList(Dto));
    }
}